
package ia;

import java.awt.Color;
import java.text.DecimalFormat;

/**
 *
 * @author bruno.marinho
 */
public class Elemento {

    private int especie;
    private double saude;
    private Color cor;
    private double evoucao;
    


    public double getEvoucao() {
        return evoucao;
    }

    public void setEvoucao(double evoucao) {
        this.evoucao = evoucao;
    }


    

    public Elemento() {
         this.especie = 0;
        this.saude =0;
 
     
    }

    public int getEspecie() {
        return especie;
    }

    public void setEspecie(int especie) {
        if(especie<=0){
        especie=0;
        }
       if(especie>9){
        especie=9;
        }
        cor=Util.geraCor(especie);
        this.especie = especie;
    }

    public double getSaude() {
        return saude;
    }

    public void setSaude(double saude) {
                if(saude<=0){
        saude=0;
        }
       if(saude>10){
        saude=10;
        }
        this.saude = saude;
    }

    public Color getCor() {
        return cor;
    }

    public void setCor(Color cor) {
        this.cor = cor;
    }

    

    public Elemento(int especie, double  saude) {
        this.especie = especie;
        this.saude = saude;
        cor=Util.geraCor(especie);
    }

    public String processa(int linha,int coluna,Elemento[][] mapa,boolean reproducao,boolean sol){

    /*   if(this.evoucao>=1){
                evoucao=0;
            if(this.especie<9){
                especie++;
                cor=Util.geraCor(especie);
                evoucao=0;
            }
               
               
        }*/


        int linhaGerada=Util.geraMovimento();
        int colunaGerada=Util.geraMovimento();

        while(linhaGerada ==0 && colunaGerada==0){
        linhaGerada=Util.geraMovimento();
        colunaGerada=Util.geraMovimento();
        }


        //    System.out.println("elemento atual"+ this.getIdentifica());
           //System.out.println(" linha atual  = "+ linha +" coluna atual = "+ coluna);
         //    System.out.println(" linha futura  = "+ linhaGerada +" coluna futura  = "+ colunaGerada);

        int linhaOriginal=linha;
        int colunaOriginal=coluna;

       
        if(linhaGerada==-1){
        linha--;
        }
        if(linhaGerada==1){
        linha++;
        }

        if(colunaGerada==-1){
        coluna--;
        }
        if(colunaGerada==1){
        coluna++;
        }

        if(linha<0){
        linha=9;
        }
        if(coluna<0){
        coluna=9;
        }
        if(linha>9){
        linha=0;
        }
        if(coluna>9){
        coluna=0;
        }

       // System.out.println(" nova posicao futura X = "+ x +" nova posicao futura Y = "+ y);
       // Elemento prox=mapa[posX][posY];

        //rotina de movimentacao
        //mata os que tem vida 0
          if(this.getSaude()<=0||this.getEspecie()<=0){
         mapa[linhaOriginal][colunaOriginal]=new Elemento(0,0);
        
         return "";
        }

        Elemento prox=mapa[linha][coluna];

        if(this.getEspecie()==prox.getEspecie() ){

             if (reproducao) {
                if( verificaIdade(this)&& verificaIdade(prox)){
                Util.verificaVizinhança(linhaOriginal, colunaOriginal, mapa, this);
                Util.reproduz++;

                 if(sol==true &&(this.getEspecie() % 2)!=0){
                this.setSaude(getSaude() - (2*Util.geraDano()));
                }else{
                this.setSaude(getSaude() - Util.geraDano());
                }

                }
            } else {
               Util.verificaVizinhança(linhaOriginal, colunaOriginal, mapa, this);
                Util.reproduz++;
                if(sol==true &&(this.getEspecie() % 2)!=0){
                this.setSaude(getSaude() - (2*Util.geraDano()));
                }else{
                this.setSaude(getSaude() - Util.geraDano());
                }
            }


        }else if(this.getEspecie()>prox.getEspecie()&&prox.getEspecie()!=0){       
         mapa[linhaOriginal][colunaOriginal]=new Elemento(0,0);
         mapa[linha][coluna]=this;
        Util.alimentacao++;
        Util.livre++;
          if(sol==true &&(this.getEspecie() % 2)!=0){
                this.setSaude(getSaude() - (2*Util.geraDano()));
                }else{
                this.setSaude(getSaude() - Util.geraDano());
                }
        }else if(this.getEspecie()>prox.getEspecie()&&prox.getEspecie()==0){           
            mapa[linhaOriginal][colunaOriginal]=new Elemento(0,0);
         mapa[linha][coluna]=this;
           Util.movimentacao++;
          
           if(sol==true &&(this.getEspecie() % 2)!=0){
                this.setSaude(getSaude() - (2*Util.geraDano()));
                }else{
                this.setSaude(getSaude() - Util.geraDano());
                }
        }
        else{
         if(sol==true &&(this.getEspecie() % 2)!=0){
                this.setSaude(getSaude() - (2*Util.geraDano()));
                }else{
                this.setSaude(getSaude() - Util.geraDano());
                }
       Util.nada++;
        }
       
    




             //System.out.println(" movido para linha = "+ linha +" movido para coluna = "+ coluna);
        //System.out.println("proximo elemento"+ prox.getIdentifica());
    


        
        return "";
    }


    public boolean verificaIdade(Elemento e){
    if(e.getSaude()>=4 && e.getSaude()<=6){
    return true;
    }
        return false;
    }
    
    public String getIdentifica() {
     DecimalFormat fmt = new DecimalFormat("0.0");    //limita o número de casas decimais

        return "[ "+ fmt.format(getSaude())+" / "+fmt.format(getEvoucao())+" / "+getEspecie()+" ]";
    }


  


    
}
